#ifndef __PANTALLA_H__
#define __PANTALLA_H__

#include "Textura.h"
#include "Contenido.h"
#include "Personaje.h"
#include "Lista.h"
#include "MarcadorPantalla.h"

using namespace std;
// CLASE SINGLETON
class Pantalla {

private:
		static bool instance ;
		static Pantalla* singleton ;
		Lista<Personaje>* listaPersonajes;
		Personaje* bonus;
		Textura* textura ;
		// Mantendra una copia del tablero
		// sera actulizada solo si activeCacheUpdate=true y se actualizan un Contenido
		// tambien se puede forzar con forzarCacheEscenario()
		Textura* cacheTablero ;
		bool activeCacheUpdate ;

		MarcadorPantalla* marcadorPantalla;

		int ancho, alto;
		int xMarcador,yMarcador;

		void iniciarSDL(); 
		void calcularTamanioPantalla();
		Pantalla();

public:
		static Pantalla* getInstance();

		void setFondo(Textura *fondo);
		void setDimensiones(int ancho, int alto);

		void agregarContenido(Contenido* unContenido);
		
		void refrescarInteriorCasita();
		void refrescarPuertaCasita();

		void agregarPersonaje(Personaje* unPersonaje);
		void agregarPersonajeBonus(Personaje* unPersonaje);
		
		void matarPersonaje(Personaje* personaje);

		//Vuelve a poner lo que habia en cache atras de un personaje
		void restablecerFondo(Personaje* personaje);
		void restablecerFondo(Lista<Personaje>* listaPersonajes);

		// POne un personaje en la pantalla, previamente conviente "restablecerFondo"
		void ponerPersonaje(Personaje* personaje);
		void ponerPersonaje(Lista<Personaje>* listaPersonajes);

		void actualizarPersonaje(Personaje* personaje);
		void solaparPersonajes(Personaje* unPersonaje, Personaje* otroPersonaje);

		void actualizarPersonajes();

		Personaje* getPersonajeBonus();

		void dibujarMarcador();
		void actualizarMarcador(int puntos1, int puntos2);

		void forzarCacheEscenario();
		void activarCacheAutomatica(bool valor);

		void setMarcadorPantalla(MarcadorPantalla* marcadorPantalla);
		Textura* getCacheTablero();
		void mostrarGanador(const string& ganador);
		int getAncho();
		int getAlto();
		void refrescar();
		Textura* getTextura();

		void cerrar();
		~Pantalla();
};




#endif